package com.lt;

import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.logging.*;

/**
 * @author lucine
 * @version 1.0 2021/5/19 06:31
 */
public class JULTest {


    /**
     * 快速入门
     */
    @Test
    public void testQuick(){
        //1、获取日志记录器
        Logger logger = Logger.getLogger("com.lt.JULTest");
        //2、日志记录输出
        logger.info("hello , JUL ");

        //通过方法进行日志记录
        logger.log(Level.INFO,"info , msg ");

        //通过占位符 方法输出变量
        String name = "lt";
        Integer age = 23;
        logger.log(Level.INFO,"用户信息 {0}{1}",new Object[]{name,age});
    }

    /**
     * 日志级别
     */
    @Test
    public void testLevel(){
        //1、获取日志记录器
        Logger logger = Logger.getLogger("com.lt.JULTest");
        logginfo(logger);
    }


    /**
     * 自定义日志级别
     */
    @Test
    public void testConfig() throws IOException {
        //1、获取日志记录器
        Logger logger = Logger.getLogger("com.lt.JULTest");

        //关闭系统默认配置
        logger.setUseParentHandlers(false);

        //自定义配置日志级别
        //创建consoleHandler
        ConsoleHandler consoleHandler = new ConsoleHandler();
        //创建简单格式转换
        SimpleFormatter simpleFormatter = new SimpleFormatter();

//   没有任何变化  simpleFormatter.format(new LogRecord(Level.INFO,"aa"));
        //进行关联
        consoleHandler.setFormatter(simpleFormatter);
        logger.addHandler(consoleHandler);

        //场景fileHandler  文件输出
        FileHandler fileHandler  = new FileHandler("/Users/a123/~workspace/aaaaaa/ideawordspace1/logger_demo/jul_demo/logs/jul.log");
        fileHandler.setFormatter(simpleFormatter);

        logger.addHandler(fileHandler);

        logger.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);
        logginfo(logger);
    }

    /**
     * logger对象父子关系
     * @throws Exception
     */
    @Test
    public void testLogParent() throws Exception{
        Logger logger1 =Logger.getLogger("com.lt");
        Logger logger2 =Logger.getLogger("com");

        //测试
        System.out.println(logger1.getParent()==logger2);
        //省略 设置logger2的输出级别 并关闭系统默认配置(logger.setUseParentHandlers(false);)，然后打印logger1
        // 发现子 继承logger父级别
    }


    /**
     * 加载自定义日志配置文件
     * @throws Exception
     */
    @Test
    public void testLogProperties() throws Exception {

        //读取配置文件,通过类加载器
        InputStream resourceAsStream = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
        //创建LoggerManager
        LogManager logManager = LogManager.getLogManager();
        //通过LoggerManager加载配置文件
        logManager.readConfiguration(resourceAsStream);
        Logger logger1 =Logger.getLogger("com.lt");
        logginfo(logger1);
    }




    /**
     * 输出各种级别日志信息
     * @param logger
     */
    public void logginfo(Logger logger){
        logger.severe("severe");
        logger.warning("warning");
        //默认输出级别
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");
    }






}
